home *** CD-ROM | disk | FTP | other *** search
- ******************************************************************************
-
- The File Analyser
-
- (c) 1993 Martin Mares, MJSoft System Software
-
- ******************************************************************************
-
-
- Copyright:
- ----------
-
- The Analyser Library and its documentation is Copyright (c) Martin Mares,
- MJSoft System Software, Prague, Czech Republic.
-
- This archive can be freely redistributed, as long as all of its files are
- included in their original form without any additions, deletions or
- modifications, and no more than a nominal fee is charged for its distribution.
- All copyright notices in the programs and accompanying documentation files
- must remain on their places. Also '.displayme' and other similar files may
- not be added. This is generally known as FREEWARE.
-
- Special permission is given to Fred Fish to distribute this program on his
- "Fish Disks".
-
- This software is provided "AS IS" without warranty of any kind, either
- expressed or implied. The author is not responsible for any damage caused by
- it.
-
- The library itself (analyser.library) can be distributed with any software
- package, either commercial or non-commercial.
-
- To maintain compatibility, you shouldn't make any changes on the library.
- Updates will be released by the author.
-
-
- What analyser.library does:
- ---------------------------
-
- Some time ago, I wrote small program, which tried to analyse files and
- estimate their types. It was only a joke, but when I were working on DD, I
- thought that it could be useful to include the analyser in it. But it seemed
- to be interesting to include the analyser in some different programs (file
- requesters etc.), therefore I have converted it to this library.
-
-
- Library functions:
- ------------------
-
- ==============================================================================
-
- AnaName(A0=Name,A3=DataNode,D1=Size,D2=AnaMode,D3=ProtBits)
-
- FUNCTION
-
- Analyse file name, size and protection bits.
-
- INPUTS
-
- Name = pointer to file name
- DataNode = pointer to data node of this file
- Size = file size (used for detection of empty files)
- AnaMode = analysis mode
- ANAMO_SIMPLE - analyse file name only
- ANAMO_CONTENTS - analyse file contents only
- ANAMO_GOOD - analyse name, if it isn't enough, analyse file contents
- ANAMO_FULL - analyse name and contents, find the best alternative
- ProtBits = file protection bits (used to detect scripts)
-
- RESULT
-
- Zero in case the contents analysis hasn't to be performed.
- (ANAMO_SIMPLE: always 0, ANAMO_CONTENTS and ANAMO_FULL: always -1,
- ANAMO_GOOD: -1 only if the name analysis has failed)
-
- DataNode->d_nclass contains name classification.
-
- SEE ALSO
-
- AnaContents, AnaEstimate
-
- ==============================================================================
-
- AnaContents(A0=FileData,A3=DataNode,D0=Size)
-
- FUNCTION
-
- Analyse contents of first max. 488 bytes of the file. (The magic number
- 488 is the smallest possible size of file data block. It allows to read all
- data needed for the analysis without reading of multiple sectors.)
-
- You should not call AnaContents without calling AnaName first.
-
- INPUTS
-
- FileData = pointer to the buffer, which is filled with file contents
- DataNode = pointer to file node
- Size = size of file data (max. 488)
-
- RESULT
-
- DataNode->d_cclass contains the classification.
-
- SEE ALSO
-
- AnaName, AnaEstimate
-
- ==============================================================================
-
- AnaEstimate(A1=DataNode,D0=AnaMode)
-
- FUNCTION
-
- Estimate final classification. You should call this function after
- AnaName and (sometimes) AnaContents.
-
- INPUTS
-
- DataNode = pointer to file node
- AnaMode = required analysis mode (see AnaName)
- bit 8 of this parameter means "Exclude all non-reliable classes"
- The most reliable method is ANAMO_FULL + ANAMO_RELIABLE
-
- RESULT
-
- DataNode->d_class contains final file classification
- DataNode->d_subclass contains file subclass
- (Only IFF files have the subclass now - it's the type of IFF (8SVX etc.))
-
- SEE ALSO
-
- AnaName, AnaContents, AnaMsg
-
- ==============================================================================
-
- AnaMsg(A0=DataNode,A1=LineBuf)
-
- FUNCTION
-
- Construct file class text according to previous file analysis. AnaEstimate
- should be called before it.
-
- This function finds the class text and appends the subclass.
-
- INPUTS
-
- DataNode = pointer to file node
- LineBuf = buffer you want to store the text to (minimally 80 bytes)
-
- RESULT
-
- LineBuf holding the null-terminated string.
-
- SEE ALSO
-
- AnaPlur, AnaText, AnaEstimate
-
- ==============================================================================
-
- AnaPlur(D0=Class,A0=LineBuf)
-
- FUNCTION
-
- Construct file class name in plural. Subclass is not appended to the name.
-
- INPUTS
-
- Class = file class number
- LineBuf = buffer you want to store the string to (minimally 80 bytes)
-
- RESULT
-
- LineBuf filled with the message (preceeded by two space characters).
-
- SEE ALSO
-
- AnaMsg, AnaText
-
- ==============================================================================
-
- AnaGetMax
-
- FUNCTION
-
- Get number of file classes.
-
- INPUTS
-
- None.
-
- RESULT
-
- Number of file classes (it's the number of the last class + 1).
-
- ==============================================================================
-
- AnaText(D0=Class)
-
- FUNCTION
-
- Get file class text without subclass. Used mostly for sorting.
-
- INPUTS
-
- Class = file class number
-
- RESULT
-
- Pointer to name of the class.
-
- SEE ALSO
-
- AnaMsg, AnaPlur
-
- ==============================================================================
-
- AnaSortTab(A0=ArpBase) (V2)
-
- FUNCTION
-
- Create the sorting tables.
-
- The first table is a sequence of words presenting the class numbers
- arranged in alphabetical (read: ASCII) order.
-
- The second one contains the inverse permutation to the first one, which is
- very useful for sorting by analysis result (you can sort by TAB2[i] instead of
- AnaText(i), which is significantly faster, because you haven't to compare any
- strings).
-
- For each i in <0;AnaGetMax()), you can really say:
-
- (a) TAB1[TAB2[i]] = i
- (b) NAME[i] < NAME[j] equals to TAB2[i] < TAB2[j]
-
- INPUTS
-
- ArpBase = base of opened arp.library (this library is used for sorting
- of the tables and it cannot be opened twice by the same process!)
-
- RESULT
-
- Pointer to two long words representing addresses of the sorting tables.
- If there isn't enough memory, 0 will be returned.
-
- NOTES
-
- There is no way to remove the sorting tables without removing the analyser
- library, but if there isn't enough memory, the library will be expunged and
- the tables will be properly deallocated. This eats some memory (4*number of
- known classes), but it makes repeated invocation of DD ANA F SORT AN
- significantly faster than it was before.
-
- ==============================================================================
-
- Notes:
- ------
-
- Send all suggestions and bug reports to mjsoft@k332.feld.cvut.cz
-
-